// 写在这里的代码只是为了方便,和react一点关系都没有
// 从redux包中引入创建store的方法
import { createStore } from 'redux'

// 定义reducer函数
// reducer函数的执行时机:
// 1. createStore的时候reducer会执行
// 2. 调用了store.dispatch的时候
function reducer(state = { c: 0, msg: 'hello' }, action) {
  console.log(state, action)
  // state 就是store中的数据
  // action 就是需求对象

  // 假设store中的state数据是一个对象 {c: 0, msg: 'hello'}

  switch (action.type) {
    case 'ADD':
      //   const newC = state.c + 1
      // 注意: 修改数据不要直接修改state,即便赋值了,store中数据也不会发生变化.reducer函数的返回值是什么,则store的数据就被改成了什么
      return {
        ...state, //写...state是为了保留state中其他的数据
        c: state.c + 1,
      }

    case 'SUB':
      //   const newC = state.c - 1
      return {
        ...state,
        c: state.c - 1,
      }
    // 因为要利用state默认值给Store初始化数据,所以default必须写
    default:
      return state
  }
}
// 创建store
// const store = createStore(reducer, { c: 0, msg: 'hello' })

const store = createStore(reducer)

// 获取store中最新的数据
// console.log(store.getState()) // 注意:默认情况下store对象中数据是undefined
// 所以我们再写代码的时候,还要给store对象初始化数据

// 初始化store的数据有两种方式:
// 1.  createStore(reducer,初始值) 不常用
// 2. 在reduer中给state添加默认值 常用

// 当store中的state数据发生变化的时候,会触发回调
// store.subscribe(() => {
//   console.log(store.getState())
// })

store.dispatch({ type: 'ADD' })
store.dispatch({ type: 'ADD' })
store.dispatch({ type: 'SUB' })


